package juc.stream;


import juc.entities.User;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author gcq
 * @Create 2020-12-03
 * * 题目：请按照给出数据，找出同时满足
 *  *      偶数ID且年龄大于24且用户名转为大写且用户名字母倒排序
 *  *      最后只输出一个用户名字
 */
public class StreamDemo {
    public static void main(String[] args) {
        User u1 = new User(11,"a",23);
        User u2 = new User(12,"b",24);
        User u3 = new User(13,"c",22);
        User u4 = new User(14,"d",28);
        User u5 = new User(16,"e",26);

        // 转成集合
        List<User> list = Arrays.asList(u1,u2,u3,u4,u5);

        list.stream().filter(p -> {
            // 过滤掉非偶数
            return p.getId() % 2 == 0;
        }).filter(p -> {
            // 过滤年龄大于24
            return p.getAge() > 24;
        }).map(f -> {
            // 全部名字转成大写
            return f.getUserName().toUpperCase();
        }).sorted((o1, o2) -> {
            // 排序
            return o2.compareTo(o1);
        }).limit(1).forEach(System.out::println); // 排序并输出全部数据


        //    R apply(T t);函数型接口，一个参数一个返回值
        Function<String,Integer> function = t -> {return t.length();};
        System.out.println(function.apply("abc"));

        // boolean test(T t);断定型接口 一个参数 返回Boolean类型
        Predicate<String> predicate = t -> {return t.startsWith("a");};
        System.out.println(predicate.test("a"));

        //void accept(T t);消费性接口、一个参数没有返回值
        Consumer<String> consumer = t -> {System.out.println(t);};
        consumer.accept("java1018");


        //    T get(); 供给型，无参数，有返回值
        Supplier<String> supplier =  () -> {return UUID.randomUUID().toString();};
        System.out.println(supplier.get());;

    }
}